﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ahi.Entity;
using DevExpress.XtraScheduler.UI;
using DevExpress.XtraScheduler;
using MongoDB.Bson;
using DevExpress.XtraEditors;

namespace Ahi.KomisyonEtkinlik
{
    public partial class EtkinlikTakvimiForm : Base.BaseForm
    {
        List<KomisyonEntity> komisyonlar;
        List<EtkinlikEntity> etkinlikler;

        public EtkinlikTakvimiForm()
        {
            InitializeComponent();

            komisyonlar = new List<KomisyonEntity>();
            schedulerControl.GoToDate(DateTime.Now);
        }

        public override void Hazirla()
        {
            //schedulerControl.Storage.Appointments.Labels.Clear();
            //schedulerControl.Storage.Appointments.Labels.AddRange(new Entity.Ozel.EtkinlikTipListe());

            for (int i = schedulerControl.Storage.Appointments.Labels.Count; i > 4; i--)
            {
                schedulerControl.Storage.Appointments.Labels.Remove(schedulerControl.Storage.Appointments.Labels[i]);
            }
        }

        public override void Yukle()
        {
            komisyonlar = MongoAdaptor.Instance.GetData<KomisyonEntity>();
            bsKomisyonlar.DataSource = komisyonlar;

            etkinlikler = MongoAdaptor.Instance.GetData<EtkinlikEntity>();
            bsEtkinlikler.DataSource = etkinlikler;

            schedulerControl.GroupType = SchedulerGroupType.Resource;
        }

        private void buttonKaydet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            MongoAdaptor.Instance.Save<KomisyonEntity>(komisyonlar);
        }

        private void schedulerControl_EditAppointmentFormShowing(object sender, AppointmentFormEventArgs e)
        {
            EtkinlikFormunuGoster(e);
        }

        private void EtkinlikFormunuGoster(AppointmentFormEventArgs e)
        {
            if (e.Appointment.ResourceId is DevExpress.XtraScheduler.Resource)
            {
                DevExpress.XtraEditors.XtraMessageBox.Show("Lütfen etkinlik oluşturmak için bir Komisyon (Kaynak) seçiniz.", "Dikkat", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                e.Handled = true;
                return;
            }

            try
            {
                EtkinlikEditForm frm = new EtkinlikEditForm();

                if (!schedulerStorage.Appointments.IsNewAppointment(e.Appointment))
                {
                    frm.Id = (ObjectId)e.Appointment.CustomFields["EtkinlikId"];
                }

                frm.EtkinlikKaydi = e.Appointment;
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    Yukle();
                }
            }
            finally
            {
                schedulerControl.Refresh();
                e.Handled = true;
            }
        }

        private void buttonKapat_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Close();
        }

        private void schedulerStorage_AppointmentsChanged(object sender, PersistentObjectsEventArgs e)
        {
            MongoAdaptor.Instance.Save<EtkinlikEntity>(etkinlikler);
        }

        private void buttonListele_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Yukle();
        }

        private void buttonEtkinlikListesi_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            EtkinlikListesiForm frm = new EtkinlikListesiForm();
            frm.Show();
        }

        private void checkCalismaSaatleriniGoster_CheckedChanged(object sender, EventArgs e)
        {
            schedulerControl.DayView.ShowWorkTimeOnly = checkCalismaSaatleriniGoster.Checked;
        }

        private void schedulerStorage_AppointmentDeleting(object sender, PersistentObjectCancelEventArgs e)
        {
            if (XtraMessageBox.Show("Silmek istediğinize emin misiniz?", "Dikkat", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != System.Windows.Forms.DialogResult.Yes)
            {
                e.Cancel = true;
                return;
            }

            var entity = MongoAdaptor.Instance.GetDataById<EtkinlikEntity>((ObjectId)e.Object.CustomFields["EtkinlikId"]);
            entity.MarkAsDeleted();
            MongoAdaptor.Instance.Save<EtkinlikEntity>(entity);
            Yukle();
        }
    }
}
